package repertorioInstrucciones;

import comun.Natural;

import maquina.Dato;
import maquina.PilaTrabajo;

public class Igual extends Instruccion{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public Igual(){
		super();
	}
	@Override
	public PilaTrabajo accion(PilaTrabajo pilaT) {
		Dato a =  (Dato) pilaT.getPila().pop();
		Dato b =  (Dato) pilaT.getPila().pop(); 
		Dato<Boolean> d = null;
		boolean res = false;
		Object o1;
		Object o2;
		if (a.getDato() instanceof Boolean){
			boolean b1 = (Boolean) a.getDato();
			boolean b2 = (Boolean) b.getDato();
			int n1,n2;
			if (b1) n1 = 1; else n1 = 0;
			if (b2) n2 = 1; else n2 = 0;
			res = n2 == n1;
			d = new Dato<Boolean>(res);
			pilaT.getPila().push(d);
			return pilaT;
		}
		else if (a.getDato() instanceof Character){
			char c1= (Character) a.getDato();
			char c2= (Character) b.getDato();
			int n1 = (int) c1;
			int n2 = (int) c2;
			res = c2 == c1;
			d = new Dato<Boolean>(res);
			pilaT.getPila().push(d);
			return pilaT;
		}else{
			if(a.getDato() instanceof Integer)o1 =(Integer)a.getDato();
			else if(a.getDato() instanceof Natural){
				int n = ((Natural)a.getDato()).getValor();
				o1 = (Integer)n;
			}else o1 = (Float)a.getDato();
		}
		if(b.getDato() instanceof Integer)o2 = (Integer)b.getDato();
		else if(b.getDato() instanceof Natural){
				int n = ((Natural)b.getDato()).getValor();
				o2 = (Integer)n;
		}else o2 = (Float)b.getDato();
		
		res = o2.equals(o1);
		d = new Dato<Boolean>(res);
		pilaT.getPila().push(d);
		return pilaT;
	}

}
